package socratesteam.view.managedBean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpSession;

import socratesteam.common.constantes.MensajeConstants;
import socratesteam.model.dominio.Categoria;
import socratesteam.model.dominio.Estado;
import socratesteam.model.dominio.Tipo;
import socratesteam.model.dominio.Usuario;
import socratesteam.model.negocio.CategoriaImpl;
import socratesteam.model.negocio.EstadoImpl;
import socratesteam.model.negocio.TipoImpl;
import socratesteam.view.common.constantes.LoginConstants;

public class BaseBean implements Serializable {

	private static final long serialVersionUID = 5365293418871229335L;
	HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);

	Usuario oUsuarioSesion = new Usuario();
	
	TipoImpl getTipoImpl = new TipoImpl();
	EstadoImpl getEstadoImpl = new EstadoImpl();
	
	ResourceBundle TAB_ = ResourceBundle.getBundle("socratesteam.view.common.resource.tablas");
	ResourceBundle labels = ResourceBundle.getBundle("socratesteam.view.common.resource.tablas");
	
	public BaseBean() {
		super();
		oUsuarioSesion.setCodigo((Integer) session.getAttribute(LoginConstants.USUARIO_ID));
		oUsuarioSesion.setUsuario((String) session.getAttribute(LoginConstants.USUARIO));
		oUsuarioSesion.setTipoUsuario(new Tipo((Integer) session.getAttribute(LoginConstants.USUARIO_TIPO)));
	}
	
	private List<Tipo> buscarTipo(Tipo oTipo) {
		List<Tipo> list = new ArrayList<Tipo>();
		try {
			list = getTipoImpl.listarTipos(oTipo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}
	
	private List<Estado> buscarEstado(Estado oEstado) {
		List<Estado> list = new ArrayList<Estado>();
		try {
			list = getEstadoImpl.listarEstados(oEstado);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}
	
	public SelectItem[] getCboUbicacion(){
		Tipo oTipo = new Tipo();
		oTipo.setCodigoTabla(Integer.parseInt(TAB_.getString("UBICACION").trim()));
		List<Tipo> lst = buscarTipo(oTipo);
		SelectItem[] items = new SelectItem[lst.size()];
		int i = 0;
		for (Tipo o:lst) {
			items[i++] = new SelectItem(o, o.getNombreLargo());
		}
		return items;
	}
	
	public SelectItem[]  getCboTipoPersona(){
		Tipo oTipo = new Tipo();
		oTipo.setCodigoTabla(Integer.parseInt(TAB_.getString("TIPO_PERSONA").trim()));
		List<Tipo> lst = buscarTipo(oTipo);
		SelectItem[] items = new SelectItem[lst.size()];
		int i = 0;
		for (Tipo o:lst) {
			items[i++] = new SelectItem(o.getCodigo(), o.getNombreLargo());
		}
		return items;
	}
	

	public SelectItem[]  getCboTipoDocumento(){
		Tipo oTipo = new Tipo();
		oTipo.setCodigoTabla(Integer.parseInt(TAB_.getString("TIPO_DOCUMENTO").trim()));
		List<Tipo> lst = buscarTipo(oTipo);
		SelectItem[] items = new SelectItem[lst.size()];
		int i = 0;
		for (Tipo o:lst) {
			items[i++] = new SelectItem(o.getCodigo(), o.getNombreLargo());
		}
		return items;
	}
	
	public SelectItem[]  getCboEstadoAviso(){
		Estado oEstado = new Estado();
		oEstado.setCodigoTabla(Integer.parseInt(TAB_.getString("ESTADO_AVISO").trim()));
		List<Estado> lst = buscarEstado(oEstado);
		SelectItem[] items = new SelectItem[lst.size()];
		int i = 0;
		for (Estado o:lst) {
			items[i++] = new SelectItem(o, o.getNombreLargo());
		}
		return items;
	}
	
	public void msg(int tipo, String mensaje){
		FacesMessage facesMessage = new FacesMessage();
		switch (tipo) {
		case MensajeConstants.INFO:
			facesMessage =  new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje.trim(), null);
			break;

		case MensajeConstants.WARN:
			facesMessage =  new FacesMessage(FacesMessage.SEVERITY_WARN, mensaje.trim(), null);
			break;
			
		case MensajeConstants.ERROR:
			facesMessage =  new FacesMessage(FacesMessage.SEVERITY_ERROR, mensaje.trim(), null);
			break;
		}
		
		FacesContext.getCurrentInstance().addMessage(null, facesMessage);
		return;
	}
	
	public void msgInfo(String label){		
		FacesMessage facesMessage =  new FacesMessage(FacesMessage.SEVERITY_INFO, labels.getString(label).trim(), null);
		FacesContext.getCurrentInstance().addMessage(null, facesMessage);
	}
	
	public void msgWarn(String label){		
		FacesMessage facesMessage =  new FacesMessage(FacesMessage.SEVERITY_WARN, labels.getString(label).trim(), null);
		FacesContext.getCurrentInstance().addMessage(null, facesMessage);
		return;
	}
	
	public void msgError(String label){		
		FacesMessage facesMessage =  new FacesMessage(FacesMessage.SEVERITY_ERROR, labels.getString(label).trim(), null);
		FacesContext.getCurrentInstance().addMessage(null, facesMessage);
		return;
	}
	
}
